#include "heart.h"

int isHeart(float x, float y)
{
    // 缩放和偏移坐标
    x = (x - 800/2) / (800/8);
    y = (y - 480/2) / (480/4);
    
    // 笛卡尔心形线方程
    float eq = pow(x*x + y*y - 1, 3) - x*x * y*y*y;
    return eq <= 0; // 小于等于0表示在爱心内部
}


int malcd_screenin(void)
{
	// 打开液晶屏
	int lcd_fd = open("/dev/fb0", O_RDWR);
	if(lcd_fd < 0)
	{
		perror("open lcd fail");
		return -1;
	}
	
    int *fb_mem = mmap(NULL, LCD_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, lcd_fd,0);
    if(fb_mem == MAP_FAILED)
    {
        perror("mmap failed");
        close(lcd_fd);
        return -1;
    }

    //使用映射内存指针，给led填充颜色
    int y, x;

	for(y = 0; y < 480; y++)
	{
		for( x =0; x < 800; x++)
		{   
            if (isHeart(x,y))
               fb_mem[y*800 + x] = 0x00FF0000;
            else
                fb_mem[y*800 + x] = 0x00FFFFFF;
            
        }
	}

    //接触映射
    munmap(fb_mem,LCD_SIZE);



    //关闭液晶屏
    close(lcd_fd);

    return 0;
}